<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>统一地图平台</title><link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
    <style>
        html,
        body,
        #mapui {
            width: 100%;
            height: 100%;
        }

        html,
        body {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <div id="mapui"></div>

    <script src="./js_example/script/map.min.js"></script>
    <script src="./js_example/script/demo.js"></script>
    <script>
        var amap = null;
        var that = this;
        map.Factory.create('mapui', {
            center: [106.17609405517578, 35.41583177128595],
            fullExtent: {
                xmin: 90.992204,
                ymin: 10.979711,
                xmax: 120.5338915,
                ymax: 50.543712
            },
            zoom: 3,
            projection: 'EPSG:4326',
            strategy: ['mapboxgl', 'openlayers'],
            style: style
        }, (o) => {
            amap = o;
            map.Factory.loadSpecialMap('mapv' , () =>{
                that.init(amap);
            })
        });


        function init(map) {
            var randomCount = 500;

            var node_data = {
                "0": { "x": 108.154518, "y": 36.643346 },
                "1": { "x": 121.485124, "y": 31.235317 },
            };

            var edge_data = [
                { "source": "1", "target": "0" }
            ]

            var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口"];

            // 构造数据
            for (var i = 1; i < randomCount; i++) {
                var cityCenter = special_mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
                node_data[i] = {
                    x: cityCenter.lng - 5 + Math.random() * 10,
                    y: cityCenter.lat - 5 + Math.random() * 10,
                }
                edge_data.push(
                    { "source": ~~(i * Math.random()), "target": '0' }
                );
            }

            var fbundling = special_mapv.utilForceEdgeBundling()
                .nodes(node_data)
                .edges(edge_data);

            var results = fbundling();

            var data = [];
            var timeData = [];

            for (var i = 0; i < results.length; i++) {
                var line = results[i];
                var coordinates = [];
                for (var j = 0; j < line.length; j++) {
                    coordinates.push([line[j].x, line[j].y]);
                    timeData.push({
                        geometry: {
                            type: 'Point',
                            coordinates: [line[j].x, line[j].y]
                        },
                        count: 1,
                        time: j
                    });
                }
                data.push({
                    geometry: {
                        type: 'LineString',
                        coordinates: coordinates
                    }
                });
            }

            var dataSet = new special_mapv.DataSet(data);

            var options = {
                strokeStyle: 'rgba(55, 50, 250, 0.3)',
                globalCompositeOperation: 'lighter',
                shadowColor: 'rgba(55, 50, 250, 0.5)',
                shadowBlur: 10,
                methods: {
                    click: function (item) {
                    }
                },
                lineWidth: 1.0,
                draw: 'simple'
            }

            var mapvLayer = new special_mapv.FmLayer(map, dataSet, options);

            var dataSet = new special_mapv.DataSet(timeData);

            var options = {
                fillStyle: 'rgba(255, 250, 250, 0.9)',
                globalCompositeOperation: 'lighter',
                size: 1.5,
                animation: {
                    type: 'time',
                    stepsRange: {
                        start: 0,
                        end: 100
                    },
                    trails: 1,
                    duration: 5,
                },
                draw: 'simple'
            }

            var mapvLayer = new special_mapv.FmLayer(map, dataSet, options);
        }
    </script>
</body>

</html>